// utils/echartsUtils.js
export function startTooltipLoop(myChart, seriesIndex = 0, interval = 2000) {
  if (!myChart) return;

  // 清理上一次的 timer / handlers（防止重复）
  try {
    if (myChart._tooltipTimer) {
      clearInterval(myChart._tooltipTimer);
      myChart._tooltipTimer = null;
    }
    if (myChart._tooltipHandlers) {
      const { mouseover, mouseout } = myChart._tooltipHandlers;
      if (mouseover) myChart.off("mouseover", mouseover);
      if (mouseout) myChart.off("mouseout", mouseout);
      myChart._tooltipHandlers = null;
    }
  } catch (e) {
    console.warn("清理旧 tooltip 资源失败", e);
  }

  const option = myChart.getOption();
  const series = option.series?.[seriesIndex];
  if (!series || !Array.isArray(series.data) || series.data.length === 0) {
    console.warn("startTooltipLoop: 指定 series 无数据", seriesIndex);
    return;
  }

  // 建立 原始数据索引 -> 过滤后可用索引 列表（使用原始下标用于 dispatchAction）
  const originalData = series.data;
  const validOriginalIndices = [];
  originalData.forEach((item, idx) => {
    if (!item) return;
    const val = item.value;
    // 仅当 value 是数组且前两个为有效经纬度时认为有效
    if (
      Array.isArray(val) &&
      val.length >= 2 &&
      val[0] !== null &&
      val[1] !== null &&
      val[0] !== undefined &&
      val[1] !== undefined &&
      !isNaN(Number(val[0])) &&
      !isNaN(Number(val[1]))
    ) {
      validOriginalIndices.push(idx);
    }
  });

  if (validOriginalIndices.length === 0) {
    console.warn("startTooltipLoop: 没有有效的点可供轮播（全部坐标无效）");
    return;
  }

  // 调试信息（上线可移除）
  // console.log("[startTooltipLoop] seriesIndex:", seriesIndex);
  // console.log("[startTooltipLoop] 原始 data 长度:", originalData.length);
  // console.log("[startTooltipLoop] valid indices:", validOriginalIndices);

  let pointer = 0;

  const showNext = () => {
    if (!myChart || validOriginalIndices.length === 0) return;
    // 隐藏上一个 tooltip（可选）
    try {
      myChart.dispatchAction({ type: "hideTip" });
    } catch (e) {
      // ignore
    }

    const originalIndex = validOriginalIndices[pointer];
    // dispatchAction 需要用原始 series 下标（dataIndex）
    myChart.dispatchAction({
      type: "showTip",
      seriesIndex,
      dataIndex: originalIndex,
    });

    pointer++;
    if (pointer >= validOriginalIndices.length) pointer = 0;
  };

  // 启动定时器
  myChart._tooltipTimer = setInterval(showNext, interval);

  // 记录并绑定鼠标事件（鼠标悬停暂停，移出恢复）
  const mouseoverHandler = () => {
    if (myChart._tooltipTimer) {
      clearInterval(myChart._tooltipTimer);
      myChart._tooltipTimer = null;
    }
  };
  const mouseoutHandler = () => {
    if (myChart._tooltipTimer) {
      clearInterval(myChart._tooltipTimer);
      myChart._tooltipTimer = null;
    }
    // 延迟重启，避免刚移出就触发鼠标事件冲突
    myChart._tooltipTimer = setInterval(showNext, interval);
  };

  myChart.on("mouseover", mouseoverHandler);
  myChart.on("mouseout", mouseoutHandler);
  myChart._tooltipHandlers = { mouseover: mouseoverHandler, mouseout: mouseoutHandler };

  // 立刻显示第一个（可选）
  showNext();
}
